import {
  ArrayNotEmpty,
  IsArray,
  IsInt,
  IsNotEmpty,
  IsNumber,
  IsObject,
  IsOptional,
  Min,
  ValidateNested,
} from 'class-validator';
import { Type } from 'class-transformer';
import { imgDto } from '../../dto/all-dto';


// SKU 子对象 DTO
class SkuDto {

  @IsObject()
  @IsNotEmpty()
  specCombination:Record<string | number,string>; // Key 必须是数字，Value 必须是字符串

  @IsNumber()
  @Min(0, { message: '价格不能小于 0' }) // 价格最小为 0
  price: number;

  @IsInt()
  @Min(0, { message: '库存不能小于 0' }) // 库存必须是整数，最小 0
  stock: number;

  @IsOptional()
  @IsInt()
  id?: number | null; // id 可选，可为 null 或数字
}

export class CreateGoodDto {
  @IsNotEmpty()
  name: string;

  @IsOptional()
  description?: string;

  @ValidateNested()//验证嵌套对象
  @Type(() => imgDto) //制定类型装换
  img: imgDto;

  @IsNotEmpty()
  goodType: number;

  @IsNotEmpty()
  @Type(() => Number)
  status: number;

  @IsNotEmpty()
  @Type(() => Number)
  specType: number;

  @IsOptional()
  @IsArray()
  // @ArrayNotEmpty()
  @Type(()=> Number)
  @IsInt({each: true})
  @Min(1,{each: true})
  specIds: number[]

  @IsOptional()
  @IsArray()
  @ArrayNotEmpty({ message: 'SKU 数组不能为空' })
  @ValidateNested({ each: true }) // 验证数组中的每个元素
  @Type(() => SkuDto) // 处理数组嵌套对象转换
  sku: SkuDto[]


  @IsOptional()
  @Min(0)
  @Type(() => Number)
  price: number;

  @IsOptional()
  @Min(0)
  @Type(() => Number)
  stock: number;
}
